%\documentclass[twoside,titlepage]{report}

%\usepackage{fullpage}
%\usepackage{graphicx}
%\usepackage{verbatim}
%\usepackage{wrapfig}
%\usepackage{amsmath}
%\usepackage{moreverb}

%\begin{document}

\section{Lessons Learned}
During the course of our project, we came to appreciate the following lessons, which we enumerate for the benefit of future classes. 
\begin{itemize}
	\item Avoiding nondeterminism is not a trivial affair. This became especially problematic when dealing with assignment. In particular, our language dictates that assignment can only happen to variables, which are entailed by expressions, but not to expressions in general. At first, we attempted to enforce this rule in the parser, but kept running into the problem of nondeterminism. After hours of failed solutions, we decided that this problem was better left to static semantic analysis, which worked as desired. So perhaps the lesson learned in this case would be that not all nondeterminism issues can be solved in the parser; some are better left to semantic analysis.
	\item A primary concern of any matrix-based language should be that of static versus dynamic sizing of vectors and matrices. Our original intention was to enforce static array sizes, so as to allow for static semantic analysis of matrix indexing. This would mean that all bounds checking would occur at compile time. Unfortunately, when we attempted to write our matrix inversion function, we soon realized that even simple tasks would be impossible without dynamically sized arrays. Thus, all of our static semantic analysis was thrown out the window, and we implemented runtime bounds checking.
	\item When dealing with proprietary architectures, one should be especially mindful of semantics. Very late into our project, we realized that the indexing format used by OpenGL was the opposite of the traditional indexing format used in mathematics, which is $row \times column$. This incongruity required many hours of work to reconcile it.
	\item We also found it useful to set meeting times and dates in order to facilitate regular meetings.  Although we did not know what we needed to accomplish at first, it was useful to meet, brainstorm, and get everyone's mind on the project.
\end{itemize}





%\end{document}